import socket
import numpy
import random

#penser au clik droit

class pyDemin:
    def __init__(self,l,L,nm):#nbj nb de joueur
        self.y=[0]*l*L#L largeur, l longueur (a verif)#rajout de self. pour pouvoir l'utiliser dans le serveur
        for i in range(nm):
            self.y[i]=-1
        random.shuffle(self.y)
        self.inf=numpy.reshape(self.y,(l,L))
        self.deco=numpy.zeros((l,L))
        self.deco
       # for i in range(nbj):
         #   self.alldeco[i]=self.deco #liste des deco pour chaque joueur
        self.l=l
        self.L=L
        self.nm=nm#nb mines
        self.encours=0

    def __repr__(self):
        s=""
        for t in range(self.l):
            for j in self.inf[t]:
                s+="%d "%j
            s+="\n"
        k=""
        for t in range(self.l):
            for j in self.deco[t]:
                k+="%d "%j
            k+="\n"
        return s+ "\n" +k
    def getpos(self,x,y):
        if x>=self.l:
            return -2
        if x<0 :
            return -2
        if y>=self.L:
            return -2
        if y<0 :
            return -2
        return self.inf[x,y]
    def comptemine(self):
        for i in range(self.l):
            for j in range(self.L): # on parcours la grille i
                k=0
                if self.inf[i,j]!=-1: #si la case n'est pas une mine
                    for x in range(-1,2):
                        for y in range(-1,2):
                            if self.getpos(i+x,j+y)==-1 :
                                k+=1
                    self.inf[i,j]=k  #**

    def devoil(self,x,y): #renvoie valeur d'une case
        self.deco[x,y]=1
        return self.inf[x,y]##et renvoyer au serveur 
#l'info (methode send) ou la bas **

    def autour(self,i,j):
        a=[]
        for x in range(-1,2):
            for y in range(-1,2):
                if self.getpos(i+x,j+y)==0:
                    a+=[self.inf[i+x,j+y]]
        return a

    def recursion(self,i,j): #decouvrement successif des cases vides
        a=self.devoil(i,j)
        if a==0:
            for x in range(-1,2):
                for y in range(-1,2):          
                    if self.getpos(i+x,j+y)!=-1 and self.getpos(i+x,j+y)!=-2 and self.deco[i+x,j+y]==0:
                        if self.getpos(i+x,j+y)==0 and self.deco[i+x,j+y]==0: 
                            self.recursion(i+x,j+y)
                        else:
                            self.devoil(i+x,j+y)

                        
    def reset(self):
        y=[0]*self.l*self.L
        for i in range(self.nm):
            y[i]=-1
        random.shuffle(y)
        self.inf=numpy.reshape(y,(self.l,self.L))
        self.deco=numpy.zeros((self.l,self.L))


	
            
#Demi=pyDemin(10,10,1)
